﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#if 0
int main() {
	//不能创建一个临时变量（即第三个变量）， 实现两个数的交换。
	int a = 5;
	int b = 3;
	//第一种（运用按位异或）//根据a^a=0,0^任意数=任意数；
	a = a ^ b;
	b = a ^ b;//b=a^b^b=a;
	a = a ^ b;//a=a^b^a;a在之前还是a=a^b;
	printf("%d\n", a);
	printf("%d\n", b);
	
	return 0;
}



int main()
{
	int a = 3;
	int b = 5;
	a = a + b;//a=8
	b = a - b;//b=3
	a = a - b;//a=5
	printf("%d\n", a);
	printf("%d\n", b);
	return 0;
}


int main()
{
	unsigned int num = -1;
	int count = 0;
	while (num)
	{
		if ((num % 2) == 1)//通过之前的方法可以看出只要不能整除的余数就为1；
		{
			count++;
		}
		num /= 2;
	}
	printf("%d\n", count);

	return 0;
}

int main()
{
	//00000000 00000000 00000000 00000001//1
    //00000000 00000000 00000000 00001011//int n=13
	//00000000 00000000 00000000 00000001//按位与后（可以用来检测最后一位是否为1）
	//在使用>> 移位操作符去把操作数的每一个数取到就可以得到每一个二进制中的1的个数了
	int n = 0;
	int count = 0;
	scanf("%d", &n);
	for (int i = 0; i < 32; i++)//因为整形4个字节，一个字节8个bite位，所以一个要循环32次
	{
		if (((n >> i) & 1) == 1)
			count++;
	}
	printf("%d\n", count);
	return 0;
}


int main()
{
	int num = 0;
	scanf("%d",&num);
	int count = 0;
	while (num)
	{
		num = num & (num - 1);
		count++;
	}
	printf("%d\n", count);


	return 0;
}


//如何判断一个数是否是2的次方数
int main()
{
	int n = 0;
	scanf("%d", &n);
	if ((n & n - 1) == 0)//因为算法可以去计算n和n-1之间是否可以去掉那个1
		printf("是2的次方数");

	return 0;
}


//将13二进制序列的第5位修改为1，然后再改为0；
int main()
{
	//13的二进制位为：00000000 00000000 00000000 00001101
	//对1进行移位1<<4:00000000 00000000 00000000 00010000
   //再对13进行按位或:00000000 00000000 00000000 00001101
	// 得出：         00000000 00000000 00000000 00011101
	// 
	//将第5位置为1后：00000000 00000000 00000000 00011101
	// 
	//对1进行移位1：  00000000 00000000 00000000 00010000
	//再对1进行取反： 11111111 11111111 11111111 11101111
	//                00000000 00000000 00000000 00011101
//将取反后的1与13进行按位与得出：
//                    00000000 00000000 00000000 00001101
// 
	//将第5位置为0后：00000000 00000000 00000000 00001101

	int num = 13;
	num = num | (1 << 4);
	printf("%d\n", num);//结果是29因为在第五位置1后的结果为29.
	num = num & (~(1 << 4));
	printf("%d\n", num);//结果是13

	return 0;
}



//求两个数二进制中不同位的个数
/*
编程实现：两个int（32位）整数m和n的二进制表达中，有多少个位(bit)不同？ 
输入例子:
1999 2299
输出例子:7
*/
int main()
{
	int a = 0;
	int b = 0;
	int temp = 0;
	int count = 0;
	while (scanf("%d %d", &a, &b) != EOF)
	{
		temp = a ^ b;
		while (temp)
		{
			count++;
			temp = temp & temp - 1;
		}
		printf("%d\n", count);
	}

	return 0;
}

/*
在一个整型数组中，只有一个数字出现一次，其他数组都是成对出现的，请找出那个只出现一次的数字。
例如：
数组中有：1 2 3 4 5 1 2 3 4，只有5出现一次，其他数字都出现2次，找出5
*/

int main()
{
	int arr[] = {1,2,3,4,5,1,2,3,4};
	int sz = sizeof(arr) / sizeof(arr[0]);
	int num = 0;
	for (int i = 0; i < sz; i++)
	{
		num ^= arr[i];//运用按位异或将数组内的数进行重复的异或运算
		//根据n^n=0和0^n=n,得出最终的结果
	}
	printf("%d\n", num);
	return 0;
}
#endif
int main()
{
	int n = 0;
	scanf("%d", &n);
	for (int i = 31; i >= 1; i -= 2)
	{
		printf("%d", (n >> i) & 1);
		
	}
	printf("\n");
	for (int i = 30; i >= 0; i -= 2)
	{
		printf("%d", (n >> i) & 1);
	}

	return 0;
}